<?php
/**
 * @brief Klasa mapująca do zarządzania przynależnością towaró do aukcji
 *
 * Relacje aukcja-grupa nie ma swojej reprezentacji w formie obiektu.
 * Ale istniej by takie relacje zapisywać i są metody, 
 * które mogą je wykorzystac w systemie
 */
class Application_Model_CommodityAffiliationMapper
{
    protected $_dbTable; /*!<  Klasa tabeli */

    /**
     * @brief @brief Metoda do ustawiania klasy tabel o podanej nazwie.
     * 
     * @param string $dbTable
     * @return Application_Model_CommodityAffiliationMapper
     */
    public function setDbTable($dbTable) {

        if (is_string($dbTable)) {

            $dbTable = new $dbTable();
        }

        if (!$dbTable instanceof Zend_Db_Table_Abstract) {

            throw new Exception('Invalid table data gateway provided');
        }

        $this->_dbTable = $dbTable;

        return $this;
    }
    
    /**
     * @brief Metoda zwracająca klasę tabel.
     * 
     * @return Application_Model_DbTable_Auction
     */
    public function getDbTable() {

        if (null === $this->_dbTable) {

            $this->setDbTable('Application_Model_DbTable_CommodityAffiliation');
        }

        return $this->_dbTable;
    }
    
    /**
     * @brief Metoda do zapisu relacji aukcja-towar
     * 
     */
    public function save($data) { 
//        $data = array(
//            'Auction_id'     
//            'Commodity_id'   
//            'shareFactor'   
//        );

        $this->getDbTable()->insert($data);
    }
    
    /**
     * @brief Metoda do usuwania relacji aukcja-towar
     * 
     */
    public function delete($auctionId, $commodityId){
        $query = 'Commodity_id = '.$commodityId.' and Auction_id = '.$auctionId.' ';
        $this->getDbTable()->delete($query);
    }
    
    /**
     * @brief Metoda zwracajaca liste relacji aukcja-towar
     * 
     * Lista jest zwracana wylanie dla okreslonej aukcji
     */
    public function fetchList($auctionId) {
        if ($auctionId === NULL) {
            return array();
        } else {
            $results = array();
            $table = $this->getDbTable();
            $select = $table->select();
            $select->from($table)
                   ->where('Auction_id = ?',$auctionId);

            $resultSet = $this->getDbTable()->fetchAll($select);
            foreach ($resultSet as $key=>$value) {
                $results[] = $value['Commodity_id'];   
            }
            //var_dump($results);
            return $results;
        }
    }
    
    /**
     * @brief Metoda zwracajaca informacje o statusie towaru na aukcji
     * 
     * Zwracana jest informacja czy na uakcji mozna tylko sprzedawa czy 
     * kupowac towar. Wynik jest rozny dla tworcy towaru i pozostalych osób.
     */
    public function fetchShareFactor($commodityId,$auctionId) {

        $table = $this->getDbTable();
        $select = $table->select();
        $select->from($table)
            ->where('Auction_id = ?',$auctionId)
            ->where('Commodity_id = ?',$commodityId);
        $resultSet = $this->getDbTable()->fetchAll($select);
        if(empty($resultSet)) {
            return null;
        }
        $result = $resultSet[0]['shareFactor'];
        return $result;
    }
    
}

